package thread;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

/**构建一个简易集合对象*/
class SimpleArrayList{
    /**通过数组来存储元素*/
    private Object[] array;//{null,,...}
    /**size用于记录有效元素个数*/
    private int size;
    public SimpleArrayList(int capacity){
        this.array=new Object[capacity];
    }
    /**向array数组中size位置添加元素*/
    public synchronized void add(Object obj){//同步方法(对象锁默认为this,也称之为同步监视器)
        //synchronized (this) {//同步代码块
            //1.判断数组是否已满,满了以后要扩容
            if (size == array.length) {
                //数组扩容,创建一个原有数组2倍大小的数组，并把原先数组内容拷贝到新数组
                array = Arrays.copyOf(array, array.length * 2);
            }
            //2.添加新元素
            array[size] = obj;
            //3.有效元素个数加1
            size++;
        //}
    }
    /**移除对象*/
    public synchronized boolean remove(Object obj){
        for(int i=0;i<size;i++){
            if(array[i].equals(obj)){
                //方案1：移动元素(将i+1位置后面的所有元素向前移动)
                for(int j=i;j<size-1;j++){
                    array[j]=array[j+1];
                }
                //方案2：移动元素
                //System.arraycopy(array,i+1,array,i,size-i-1);
                size--;
                array[size]=null;
                return true;
            }
        }
        return false;
    }
    public int size() {
        return size;
    }
}
public class SimpleArrayListDemo01 {
    public static void main(String[] args) throws InterruptedException {
        //1.构建集合对象
        SimpleArrayList list=new SimpleArrayList(16);
        //2.构建两个线程对象，分别向集合中添加100个元素
        Thread t1=new Thread(){
            public void run(){
                for(int i=0;i<100;i++){
                    list.add(i);
                }
            }
        };
        Thread t2=new Thread(){
            public void run(){
                for(int i=100;i<200;i++){
                    list.add(i);
                }
            }
        };
        t1.start();
        t2.start();
        //3.获取集合中的有效元素个数
        Thread.sleep(500);
        System.out.println(list.size());
    }
}
